package com.gmail.ceac13;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;

import android.util.Log;

import com.gmail.ceac13.servicos.ConsultaHttp;
import com.thoughtworks.xstream.XStream;

/**
 * @author Carlos Eduardo
 * Classe que simula um servidor 
 */
public class Servidor {
	@SuppressWarnings("unchecked")
	public static List<Friend> listarAmigos(int user_id, String posicao, String endServer) {
		ArrayList<Friend> friends = new ArrayList<Friend>();
		String s = ConsultaHttp.listarAmigos(""+user_id, posicao, endServer);

		XStream xstream = new XStream();
		xstream.alias("Friend", Friend.class);

		friends = (ArrayList<Friend>)xstream.fromXML(s);
		
        return friends;
	}
	/*
	public static List<Mensagem> getHistoricoMensagens(int id_usuario, int id_amigo) {
		ArrayList<String> frases = new ArrayList<String>();
		frases.add("Depois de uma breve declaração proferida em Nova Iorque");
		frases.add("A 5 de Setembro, a sua assessora anunciou que Strauss-Kahn iria falar");
		frases.add("O antigo director-geral do FMI regressou a França a 4 de Setembro, depois de ter estado detido em Nova Iorque");
		frases.add("O processo obrigou à sua demissão do FMI e a pôr um ponto final nas suas ambições à presidência francesa");
		frases.add("Strauss-Kahn era considerado o favorito dos socialistas para as próximas eleições presidenciais de Maio de 2012.");
		frases.add("As acusações que pendiam");
		frases.add("Mais recentemente, a 12 de Setembro");
		frases.add("Em Junho, depois da detenção de Strauss-Kahn em Nova Iorque,");
		frases.add("A escolha da via da ONU não é consensual entre os próprios palestinianos, por várias razões, uma das quais é a divisão do poder entre Gaza e a Cisjordânia");
		frases.add("Tudo bem?");
		frases.add("Td ok, e vc?");
		frases.add("Onde está?");
		frases.add("No Hell's, e você?");
		frases.add("Um terremoto de magnitude 6,8 atingiu o estado de Sikkim");
		frases.add("O epicentro do tremor, que aconteceu às 18h10");
		frases.add("elo menos duas pessoas morreram na Índia, uma criança no estado de Sikkim e uma pessoa no estado de Bihar");
		frases.add("Três teriam morrido na cidade e outras duas na em Dharan, cidade ao leste da capital nepalesa.");
		frases.add("Parte do prédio da embaixada do  Reino Unido");
		frases.add("Há feridos, mas a polícia não confirma o número e também se há mortos.");
		frases.add("Valeu!");
	
		ArrayList<Mensagem> mensagens = new ArrayList<Mensagem>();
		
		Random randomNum = new Random();
		int qtd = randomNum.nextInt(frases.size());
		int n, b;
	
		for (int i = 0; i < qtd; i++) {
			n = randomNum.nextInt(frases.size());
			b = randomNum.nextInt(10);
			if (b > 5)
				mensagens.add(new Mensagem(frases.get(n), false, new Date()));
			else
				mensagens.add(new Mensagem(frases.get(n), true, new Date()));
		}
		
		return mensagens;
	}
	
*/		
	public static Friend buscarUsuario(String email, String endServer) {
		String s = ConsultaHttp.buscarUsuarioPorEmail(email, endServer);
		XStream xstream = new XStream();
		xstream.alias("Friend", Friend.class);
		
		Friend amigo = (Friend)xstream.fromXML(s);
		
		return amigo;
	}
	
	public static Friend buscarUsuario(int usuario_id, String endServer) {
		String s = ConsultaHttp.buscarUsuario(""+usuario_id, endServer);
		XStream xstream = new XStream();
		xstream.alias("Friend", Friend.class);
		
		Friend amigo = (Friend)xstream.fromXML(s);
		
		return amigo;
	}
	
	public static Friend buscarUsuarioLogado() {
		return null;
	}
	
	@SuppressWarnings("unchecked")
	public static List<Friend> listarRequisicoes(int user_id, String endServer) {
		List<Friend> al;
		
		String s = ConsultaHttp.listarRequisicoes(""+user_id, endServer);

		XStream xstream = new XStream();
		xstream.alias("Friend", Friend.class);
		
		al = (List<Friend>)xstream.fromXML(s);

        return al;
	}
	
	public static boolean solicitarAmizade(int user_id, String email, String endServer) {
		if (ConsultaHttp.requisitarAmizade(""+user_id, email, endServer).equals(""))
			return true;
		else
			return false;
	}
	
	public static boolean registrarUsuario(String nome, String email, String senha, String endServer) {
		if (!ConsultaHttp.registrarUsuario(nome, email, senha, endServer).equals("Erro ao inserir")) {
			return true;
		}
		else
			return false;
	}
	
	public static int isLogin(String email, String senha, String endServer) {
		return Integer.parseInt(ConsultaHttp.isLogin(email, md5(senha), endServer));
	}
	
	public static String md5(String senha) {
		MessageDigest md;
		try {
			md = MessageDigest.getInstance("MD5");
			md.update(senha.getBytes());
			byte[] hashMd5 = md.digest();
			senha = stringHexa(hashMd5);
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
		System.out.println("Senha: "+senha);
		return senha;
	}
	private static String stringHexa(byte[] bytes) {
	   StringBuilder s = new StringBuilder();
	   for (int i = 0; i < bytes.length; i++) {
	       int parteAlta = ((bytes[i] >> 4) & 0xf) << 4;
	       int parteBaixa = bytes[i] & 0xf;
	       if (parteAlta == 0) s.append('0');
	       s.append(Integer.toHexString(parteAlta | parteBaixa));
	   }
	   return s.toString();
	}

	public static boolean responderRequisicao(int user_id, int id, boolean b, String endServer) {
		String s = ConsultaHttp.responderRequisicao(user_id, id, b, endServer);
		if (s.equals(""))
			return true;
		else
			return false;
	}
}
